home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 2005 June (DVD) / DPPRO0605DVD.iso / Install / program files / Borland / BDS / 3.0 / Demos / Delphi.Net / CLR / Menus / Menus.dpr < prev   
Encoding:
Text File  |  2004-10-22  |  8.7 KB  |  292 lines

  1. program Menus;
  2.  
  3. uses
  4.   System.Reflection,
  5.   System.Drawing,
  6.   System.Drawing.Text,
  7.   System.ComponentModel,
  8.   System.Windows.Forms,
  9.   System.Runtime.InteropServices;
  10.  
  11. type
  12.   { .NET to VCL mapping }
  13.   TLabel       = System.Windows.Forms.Label;
  14.   TMainMenu    = System.Windows.Forms.MainMenu;
  15.   TMenuItem    = System.Windows.Forms.MenuItem;
  16.   TForm        = System.Windows.Forms.Form;
  17.   TContextMenu = System.Windows.Forms.ContextMenu;
  18.   TContainer   = System.ComponentModel.Container;
  19.   TSize        = System.Drawing.Size;
  20.   TPoint       = System.Drawing.Point;
  21.   TFont        = System.Drawing.Font;
  22.   TFontFamily  = System.Drawing.FontFamily;
  23.  
  24.  
  25.   TFontSizes = (Small, Medium, Large);
  26.  
  27. const
  28.   FontSizes: array[Low(TFontSizes)..High(TFontSizes)] of Single = (8, 12, 24);
  29.  
  30. type
  31.   { Application main form }
  32.   [STAThread]
  33.   TMainForm = class(TForm)
  34.   private
  35.     FComponents: TContainer;
  36.     FFontSize: Single;
  37.     procedure InitComponents;
  38.     procedure FileExitClicked(Sender: TObject; Args: EventArgs);
  39.     procedure FileOpenClicked(Sender: TObject; Args: EventArgs);
  40.     procedure FormatFontClicked(Sender: TObject; Args: EventArgs);
  41.     procedure FormatSizeClicked(Sender: TObject; Args: EventArgs);
  42.   published
  43.     Label1: TLabel;
  44.     MainMenu: TMainMenu;
  45.     Label1ContextMenu: TContextMenu;
  46.  
  47.     //Used to track which menu items are checked/unchecked
  48.     mmiSansSerif: TMenuItem;
  49.     mmiSerif: TMenuItem;
  50.     mmiMonoSpace: TMenuItem;
  51.  
  52.     mmiSmall: TMenuItem;
  53.     mmiMedium: TMenuItem;
  54.     mmiLarge: TMenuItem;
  55.  
  56.     cmiSansSerif: TMenuItem;
  57.     cmiSerif: TMenuItem;
  58.     cmiMonoSpace: TMenuItem;
  59.  
  60.     cmiSmall: TMenuItem;
  61.     cmiMedium: TMenuItem;
  62.     cmiLarge: TMenuItem;
  63.  
  64.     miMainFormatFontChecked: TMenuItem;
  65.     miMainFormatSizeChecked: TMenuItem;
  66.     miContextFormatFontChecked: TMenuItem;
  67.     miContextFormatSizeChecked: TMenuItem;
  68.  
  69.     currentFontFamily: FontFamily;
  70.     monoSpaceFontFamily: FontFamily;
  71.     sansSerifFontFamily: FontFamily;
  72.     serifFontFamily: FontFamily;
  73.   public
  74.     constructor Create(Owner: TObject);
  75.     destructor Destroy; override;
  76.   end;
  77.  
  78. { TMainForm }
  79.  
  80. constructor TMainForm.Create(Owner: TObject);
  81. var
  82.   miFile, miFormat, miFontFace, miFontSize: TMenuItem;
  83. begin
  84.   inherited Create;
  85.   InitComponents;
  86.  
  87.   // Initialize Fonts - use generic fonts to avoid problems across
  88.   // different versions of the OS
  89.   monoSpaceFontFamily:= TFontFamily.Create(GenericFontFamilies.Monospace);
  90.   sansSerifFontFamily:= TFontFamily.Create(GenericFontFamilies.SansSerif);
  91.   serifFontFamily:= TFontFamily.Create(GenericFontFamilies.Serif);
  92.   currentFontFamily:= sansSerifFontFamily;
  93.  
  94.   //Add File Menu
  95.   miFile:= MainMenu.MenuItems.Add('&File');
  96.   miFile.MenuItems.Add(TMenuItem.Create('&Open...', nil, Shortcut.CtrlO));
  97.   miFile.MenuItems[0].Add_Click(FileOpenClicked);
  98.  
  99.   miFile.MenuItems.Add('-');     // Gives us a seperator
  100.  
  101.   miFile.MenuItems.Add(TMenuItem.Create('E&xit', nil, Shortcut.CtrlX));
  102.   miFile.MenuItems[2].Add_Click(FileExitClicked);
  103.  
  104.   //Add Format Menu
  105.   miFormat:= mainMenu.MenuItems.Add('F&ormat');
  106.  
  107.   //Font Face sub-menu
  108.   mmiSansSerif:= TMenuItem.Create;
  109.   mmiSansSerif.Text:= '&1. ' + sansSerifFontFamily.Name;
  110.   mmiSansSerif.Add_Click(FormatFontClicked);
  111.   mmiSansSerif.Checked:= True;
  112.   mmiSansSerif.DefaultItem:= True;
  113.  
  114.   mmiSerif:= TMenuItem.Create;
  115.   mmiSerif.Text:= '&2. ' + serifFontFamily.Name;
  116.   mmiSerif.Add_Click(FormatFontClicked);
  117.  
  118.   mmiMonoSpace:= TMenuItem.Create;
  119.   mmiMonoSpace.Text:= '&3. ' + monoSpaceFontFamily.Name;
  120.   mmiMonoSpace.Add_Click(FormatFontClicked);
  121.  
  122.   //miFormat.MenuItems.Add('Font &Face', (new MenuItem[]{ mmiSansSerif, mmiSerif, mmiMonoSpace }));
  123.   // the above line became the 6 lines below.
  124.   miFontFace:= TMenuItem.Create;
  125.   miFontFace.Text:= 'Font &Face';
  126.   miFontFace.MenuItems.Add(mmiSansSerif);
  127.   miFontFace.MenuItems.Add(mmiSerif);
  128.   miFontFace.MenuItems.Add(mmiMonoSpace);
  129.   miFormat.MenuItems.Add(miFontFace);
  130.  
  131.   //Font Size sub-menu
  132.   mmiSmall:= TMenuItem.Create;
  133.   mmiSmall.Text:= '&Small';
  134.   mmiSmall.Add_Click(FormatSizeClicked);
  135.  
  136.  
  137.   mmiMedium:= TMenuItem.Create; 
  138.   mmiMedium.Text:= '&Medium';
  139.   mmiMedium.Add_Click(FormatSizeClicked);
  140.   mmiMedium.Checked:= True ;
  141.   mmiMedium.DefaultItem:= True ;
  142.  
  143.   mmiLarge:= TMenuItem.Create;
  144.   mmiLarge.Text:= '&Large';
  145.   mmiLarge.Add_Click(FormatSizeClicked);
  146.  
  147.   //miFormat.MenuItems.Add('Font &Size',(new MenuItem[]{ mmiSmall, mmiMedium, mmiLarge }));
  148.   miFontSize:= TMenuItem.Create;
  149.   miFontSize.Text:= 'Font &Size';
  150.   miFontSize.MenuItems.Add(mmiSmall);
  151.   miFontSize.MenuItems.Add(mmiMedium);
  152.   miFontSize.MenuItems.Add(mmiLarge);
  153.   miFormat.MenuItems.Add(miFontSize);
  154.  
  155.   //Add Format to label context menu
  156.   //Note have to add a clone because menus can't belong to 2 parents
  157.   Label1ContextMenu.MenuItems.Add(miFormat.CloneMenu());
  158.  
  159.   // Set up the context menu items - we use these to check and uncheck items
  160.   cmiSansSerif:= Label1ContextMenu.MenuItems[0].MenuItems[0].MenuItems[0];
  161.   cmiSerif:= Label1ContextMenu.MenuItems[0].MenuItems[0].MenuItems[1];
  162.   cmiMonoSpace:= label1ContextMenu.MenuItems[0].MenuItems[0].MenuItems[2];
  163.   cmiSmall:= Label1ContextMenu.MenuItems[0].MenuItems[1].MenuItems[0];
  164.   cmiMedium:= Label1ContextMenu.MenuItems[0].MenuItems[1].MenuItems[1];
  165.   cmiLarge:= Label1ContextMenu.MenuItems[0].MenuItems[1].MenuItems[2];
  166.  
  167.   //We use these to track which menu items are checked
  168.   //This is made more complex because we have both a menu and a context menu
  169.   miMainFormatFontChecked:= mmiSansSerif;
  170.   miMainFormatSizeChecked:= mmiMedium;
  171.   miContextFormatFontChecked:= cmiSansSerif;
  172.   miContextFormatSizeChecked:= cmiMedium;
  173. end;
  174.  
  175. destructor TMainForm.Destroy;
  176. begin
  177.   if (FComponents <> nil) then
  178.    FComponents.Dispose;
  179.   inherited;
  180. end;
  181.  
  182. procedure TMainForm.InitComponents;
  183. begin
  184.   SuspendLayout;
  185.  
  186.   FFontSize:= FontSizes[Medium];
  187.   FComponents:= TContainer.Create;
  188.   MainMenu:= TMainMenu.Create;
  189.  
  190.   Label1:= TLabel.Create;
  191.   label1ContextMenu:= TContextMenu.Create;
  192.   Text:= 'Menus ''R Us';
  193.   AutoScaleBaseSize:= TSize.Create(5, 13);
  194.   Menu:= MainMenu;
  195.   ClientSize:= TSize.Create(392, 117);
  196.   Label1.BackColor:= Color.LightSteelBlue;
  197.   Label1.Location:= TPoint.create(16, 24);
  198.   Label1.TabIndex:= 0;
  199.   Label1.Anchor:= AnchorStyles(13);
  200.   Label1.Size:= TSize.Create(360, 50);
  201.   Label1.Text:= 'Right Click on me - I have a context menu!';
  202.   Label1.ContextMenu:= Label1ContextMenu;
  203.   Controls.Add (Label1);
  204.  
  205.   ResumeLayout(False);
  206. end;
  207.  
  208. procedure TMainForm.FileExitClicked(Sender: TObject; Args: EventArgs);
  209. begin
  210.   Close;
  211. end;
  212.  
  213. procedure TMainForm.FileOpenClicked(Sender: TObject; Args: EventArgs);
  214. begin
  215.   MessageBox.Show('And why would this open a file?');
  216. end;
  217.  
  218. procedure TMainForm.FormatFontClicked(Sender: TObject; Args: EventArgs);
  219. var
  220.   miClicked: TMenuItem;
  221. begin
  222.   miClicked:= TMenuItem(Sender);
  223.  
  224.   miMainFormatFontChecked.Checked:= False;
  225.   miContextFormatFontChecked.Checked:= False;
  226.  
  227.   if (miClicked = mmiSansSerif) or (miClicked = cmiSansSerif) then
  228.   begin
  229.     miMainFormatFontChecked:= mmiSansSerif;
  230.     miContextFormatFontChecked:= cmiSansSerif;
  231.     currentFontFamily:= sansSerifFontFamily;
  232.   end
  233.   else if (miClicked = mmiSerif) or (miClicked = cmiSerif) then
  234.   begin
  235.     miMainFormatFontChecked:= mmiSerif;
  236.     miContextFormatFontChecked:= cmiSerif;
  237.     currentFontFamily:= serifFontFamily;
  238.   end
  239.   else
  240.   begin
  241.     miMainFormatFontChecked:= mmiMonoSpace;
  242.     miContextFormatFontChecked:= cmiMonoSpace;
  243.     currentFontFamily:= monoSpaceFontFamily;
  244.   end;
  245.  
  246.   miMainFormatFontChecked.Checked:= True;
  247.   miContextFormatFontChecked.Checked:= True;
  248.   Label1.Font:= TFont.Create(currentFontFamily, FFontSize);
  249. end;
  250.  
  251. procedure TMainForm.FormatSizeClicked(Sender: TObject; Args: EventArgs);
  252. var
  253.   fontSizeString: string;
  254. begin
  255.   miMainFormatSizeChecked.Checked:= False;
  256.   miContextFormatSizeChecked.Checked:= False;
  257.  
  258.   fontSizeString:= TMenuItem(Sender).Text;
  259.  
  260.   if (fontSizeString = '&Small') then
  261.   begin
  262.     miMainFormatSizeChecked:= mmiSmall;
  263.     miContextFormatSizeChecked:= cmiSmall;
  264.     FFontSize:= FontSizes[Small];
  265.   end
  266.   else if (fontSizeString = '&Large') then
  267.   begin
  268.     miMainFormatSizeChecked:= mmiLarge;
  269.     miContextFormatSizeChecked:= cmiLarge;
  270.     FFontSize:= FontSizes[Large];
  271.   end
  272.   else
  273.   begin
  274.     miMainFormatSizeChecked:= mmiMedium;
  275.     miContextFormatSizeChecked:= cmiMedium;
  276.     FFontSize:= FontSizes[Medium];
  277.   end;
  278.  
  279.   miMainFormatSizeChecked.Checked:= True;
  280.   miContextFormatSizeChecked.Checked:= True;
  281.  
  282.   Label1.Font:= TFont.Create(currentFontFamily, FFontSize);
  283. end;
  284.  
  285. var
  286.   MainForm: TMainForm;
  287. begin
  288.   MainForm:= TMainForm.Create(nil);
  289.   Application.Run(MainForm);
  290.   MainForm.Free;
  291. end.
  292.